1.溢出/下溢(Overflow/Underflow)
* 問題:當整數運算結果超過最大或最小範圍時,數值會「溢出」或「下溢」到另一個值。這可能導致錯誤的邏輯執行和資金錯誤。
示例:
* 解決方案:使用 SafeMath 庫來防止這種情況。在 Solidity 0.8.0 及更高版本,這類運算自動會有安全檢查,但可以額外使用 OpenZeppelin 的 SafeMath。
2.權限控制錯誤
* 問題:某些功能應該只能由合約的特定角色(如擁有者)執行,若權限控制不當,可能導致惡意使用者進行敏感操作,例如提款或更改合約狀態。
* 解決方案:實施明確的角色驗證,例如使用 Ownable 模式或 OpenZeppelin 的 AccessControl,來確保只有特定地址或角色可以執行某些功能。
3.假合約(Fake Contract)
* 問題:合約與另一個合約進行交互時,假合約可能會冒充真實的合約來進行欺詐,從而引發錯誤的邏輯執行或資金損失。
* 解決方案:使用 address.code.length 來驗證是否與合約地址交互,或通過設置白名單的合約進行交互。
** OpenZeppelin**
是一個知名的智能合約開發框架,它提供了一套已經過審計和安全測試的 Solidity 智能合約庫。OpenZeppelin 為智能合約開發者提供了一個強大的工具集,能夠快速且安全地開發合約,並應對智能合約中常見的漏洞。就是站在巨人的肩膀上看得更遠的概念!
30天的學習終於結束了,我對於區塊鏈更加熟悉與了解,包含去中心化技術的理論基礎,還學習了實際的應用開發流程,開始智能合約的開發後,我從基礎的 Solidity 語法開始,逐步構建自己的合約。透過多次練習,我掌握了如何創建變量、函數,以及如何透過合約進行複雜邏輯的自動化操作。我覺得有一個重要的進展是學習並應用OpenZeppelin 提供的模組化合約框架,讓我能夠進一步提升了智能合約的安全性與可擴展性。從智能合約編寫、測試到部署的一整套流程,並對區塊鏈技術有了更全面的理解。這30天學到了是一個巨大的挑戰也學到了許多新的知識與技能,是很有成就感的也覺得這30天的努力很值得!